#!/usr/bin/python
# -*- coding: utf-8 -*-

import wx
import wx.aui

from imagenes import images
from contrasenhas.controlador import Controlador
from comun import mensageAlerta as msja

class VistaContrasenha(wx.Panel):
    
    """
    Clase que genera la interfaz gráfica del paquete de contraseñas
    """
    
    #Constructor de la clase
    def __init__(self,ventanaMadre):
        """
        Creación de un objeto de tipo wx.Window para el módulo de contrasenhas.
        :param ventanaMadre: La ventan madre que contendrá esta ventana
        """

        self.parent = ventanaMadre.parent
        self.controlador = Controlador(self)
        
        wx.Panel.__init__(self, ventanaMadre, -1)
        
        
        # ALAMACENAMOS LA CLASE FrameEditarCategoria EN UNA PROPIEDAD DE LA VENTANA PARA PODER MANIPULARLA DESDE LA CONTROLADORA
        self.FrameEditarCategoria = FrameEditarCategoria
        self.FrameModificarClave = FrameModificarClave
        # VARIABLE QUE ALMACENA EL TREE QUE SE HA PRECIONADO
        ####self.treePresionado = None
        
        #######################################################
        # DEFINIMOS LOS IDs DEL TOOLBAR
        self.idCrearBD = 1000 # BOTON CREAR BASE DE DATOS
        self.idAbrirBD = 1010 # BOTON ABRIR BASE DE DATOS
        self.idCerrarBD = 1020 # BOTON CERRAR BASE DE DATOS
        self.idAnhadirC = 1030 # BOTON AÑADIR CATEGORÍA
        self.idEditarC = 1040 # BOTON EDITAR CATEGORÍA
        self.idEliminarC = 1050 # BOTON ELIMINAR CATEGORÍA
        self.idCrearClave = 1060 # BOTON CREAR CLAVE
        self.idVerClave = 1070 # BOTON VER CLAVE
        self.idEliminarClave = 1080 # BOTON ELMINAR CLAVE
        self.idGenerarClave = 1090 # v GENERAR CLAVE
        
        self.tool()
        
        # CREACIÓN DE LAS VENTANAS
        self.crearVentanas()
        # CREACIÓN DE LAS DIVISIONES DE LA PANTALLA
        self.crearAuiManager()
    
    
    def tool(self):
        """ FUNCION QUE CREA EL TOOLBAR"""
        
        # LIMPIAMOS EL TOOL POR SI YA HABÍA SIDO CREADO POR OTRO VENTANA
        self.parent.tb.ClearTools()
        # AÑADIMOS SEPARARDOR |
        self.parent.tb.AddSeparator()
        # CREAMOS LOS TOOLBARs
        self.parent.tb.AddLabelTool(self.idCrearBD, "",images.getFileNew32Bitmap(), shortHelp="Crear Base de Datos: Agrega nuevas base de datos.")#longHelp="Long help for 'New'"
        self.parent.tb.AddLabelTool(self.idAbrirBD, "", images.getFileOpen32Bitmap(), shortHelp="Abrir Base de Datos: Accede a la base de datos o un grupo de estas con el fin de ejecutarlos en el sistema.")
        self.parent.tb.AddLabelTool(self.idCerrarBD, "", images.getFileClose32Bitmap(),shortHelp="Cerrar Base de Datos: Finaliza la base de datos que se encuentra en ejecución dentro del sistema.")
        
        # CREAMOS LOS EVENTOS
        self.parent.Bind(wx.EVT_TOOL, self.controlador.verificarBDAbierta, id=self.idCrearBD)
        self.parent.Bind(wx.EVT_TOOL, self.controlador.verificarAbrirBd, id=self.idAbrirBD)
        self.parent.Bind(wx.EVT_TOOL, self.controlador.verificarCerrarBD, id=self.idCerrarBD)
    
    
    def crearAuiManager(self):
        
        self.mgr = wx.aui.AuiManager()
        self.mgr.SetManagedWindow(self)
        self.mgr.AddPane(self.panelA, wx.aui.AuiPaneInfo().CenterPane().Name("Panel A"))
        self.mgr.AddPane(self.panelB,
                         wx.aui.AuiPaneInfo().
                         Left().Layer(2).BestSize((240, -1)).
                         MinSize((160, -1)).
                         Floatable(False).FloatingSize((240, 700)).
                         Caption("GRUPOS").
                         CloseButton(False).
                         Name("Panel B"))
        self.mgr.AddPane(self.panelC,
                         wx.aui.AuiPaneInfo().
                         Bottom().BestSize((-1, 150)).
                         MinSize((-1, 60)).
                         Floatable(False).FloatingSize((500, 160)).
                         Caption("Mensajes").
                         CloseButton(False).
                         Name("Panel C"))

        self.mgr.Update()

        self.mgr.SetFlags(self.mgr.GetFlags() ^ wx.aui.AUI_MGR_TRANSPARENT_DRAG)
    
    def crearVentanas(self): 
        
        self.panelA = wx.Window(self, -1, style=wx.NO_BORDER)
        self.crearListCtrl()
        
        self.panelB = wx.Window(self, -1, style=wx.NO_BORDER)
        self.crearMenuIzquierdo()
        self.panelC = wx.Window(self, -1, style=wx.NO_BORDER)
        # COLOR DE FONDO
        self.panelC.SetBackgroundColour(wx.WHITE)
        # COLOCAMOS UN TEXTO ESTACTICO QUE POR DEFECTO DIRÁ: INICIO DE LA APLCIACIÓN
        self.txtPanelC = wx.StaticText(
                    self.panelC, -1,
                    "Inicio de la aplicación",
                    (5,5), (-1, 50)
                    )
        
        
    def crearListCtrl(self):
        
        self.listCtrl = TestListCtrl(self.panelA, -1,
                                 style=wx.wx.BORDER_SUNKEN
                                 | wx.LC_REPORT 
                                 #| wx.BORDER_NONE
                                 #| wx.LC_EDIT_LABELS
                                 | wx.LC_SORT_ASCENDING
                                 #| wx.LC_NO_HEADER
                                 | wx.LC_VRULES
                                 | wx.LC_HRULES
                                 | wx.LC_SINGLE_SEL
                                 )
        
        self.listaImagenes = wx.ImageList(16, 16)
        #Cramos la  imagen de carpeta en a lista del listctrl
        self.imagenLista = self.listaImagenes.Add(images.getFileNewBitmap())
        
        #Añadimos la lista de imagenes en el listcrtl
        self.listCtrl.SetImageList(self.listaImagenes, wx.IMAGE_LIST_SMALL)
        #Creamos la cabeceras del archivo 
        self.listCtrl.InsertColumn(0, "Título")
        self.listCtrl.InsertColumn(1, "Usuario",wx.LIST_FORMAT_LEFT)
        #self.listCtrl.InsertColumn(2, "URL",wx.LIST_FORMAT_LEFT)
        self.listCtrl.InsertColumn(2, "Contraseña")
        self.listCtrl.InsertColumn(3, "Comentarios")
        
        self.listCtrl.SetColumnWidth(0,160)#wx.LIST_AUTOSIZE_USEHEADER
        self.listCtrl.SetColumnWidth(1,160)
        #self.listCtrl.SetColumnWidth(2,160)
        self.listCtrl.SetColumnWidth(2,160)
        self.listCtrl.SetColumnWidth(3,300)
        
        object_1 = wx.BoxSizer(wx.VERTICAL)
        object_1.Add(self.listCtrl, 1, wx.EXPAND)
        self.panelA.SetSizer(object_1)
        object_1.Fit(self.panelA)
        
        self.listCtrl.SetImageList(self.listaImagenes, wx.IMAGE_LIST_SMALL)
        
        # EVENTO QUE SE EJECUTA AL HACER CLICK EN EL BOTÓN DERECHO DEL RATÓN SOBRE EL LISTCTRL
        # PARA WXMSW
        self.listCtrl.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.controlador.listClickDerecho)
        #PARA WXGKT
        self.listCtrl.Bind(wx.EVT_RIGHT_UP, self.controlador.listClickDerecho)        
        
        # PERMITE SELECCIONAR EL ITEM EN CASO DE NO ESTAR SELECCIONADO
        self.listCtrl.Bind(wx.EVT_RIGHT_DOWN, self.controlador.listDerechoAbajo)
        
        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.controlador.OnItemSelected, self.listCtrl)
        
        
    def crearMenuIzquierdo(self):
        
        # CREAMOS EL ID
        tID = 5000 #wx.NewId()
        # INDICAMOS QUE EL TREECTRL ESTARÁ DENTRO DEL self.panelB
        self.tree = MyTreeCtrl(self.panelB, tID, wx.DefaultPosition, (240, 700),
                               wx.TR_DEFAULT_STYLE
                               #wx.TR_HAS_BUTTONS
                               #| wx.TR_EDIT_LABELS
                               #| wx.TR_MULTIPLE
                               | wx.TR_HIDE_ROOT
                               )
        
        # DEFINIMOS EL TAMAÑO DE LAS IMÁGENES
        isz = (16,16)
        il = wx.ImageList(isz[0], isz[1])
        # COLOCAMOS LOS TAMAÑOS DEFINIDOS DENTRO DEL TREECTRL
        self.tree.SetImageList(il)
        img = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FOLDER,wx.ART_OTHER, isz))
        self.il = il
        #
        self.fldropenidx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_FILE_OPEN,   wx.ART_OTHER, isz))
        self.fldridx = il.Add(wx.ArtProvider_GetBitmap(wx.ART_NORMAL_FILE, wx.ART_OTHER, isz))
        self.root = self.tree.AddRoot("")
        self.tree.SetPyData(self.root, None)
        self.tree.SetItemImage(self.root,img, wx.TreeItemIcon_Normal)
        
        # CARGAMOS LAS CATERGORIAS O GRUPOS DEL MENÚ IZQUIERDO
        self.controlador.listarCategorias()
        # EVENTO QUE SE EJECUTA CUANDO SE SELECCIONADO UN ITEM DEL MARCO GRUPOS 
        self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.controlador.treeSeleccionado, self.tree)    
        
        # EVENTO QUE SE EJECUTA AL HACER CLICK EN EL BOTÓN DERECHO DEL RATÓN SOBRE EL TREE
        # PARA WXMSW
        self.tree.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.controlador.treeClickDerecho)
        #PARA WXGKT
        self.tree.Bind(wx.EVT_RIGHT_UP, self.controlador.treeClickDerecho)        
        
        # PERMITE SELECCIONAR EL ITEM EN CASO DE NO ESTAR SELECCIONADO
        self.tree.Bind(wx.EVT_RIGHT_DOWN, self.controlador.treeDerechoAbajo)
        
        
    def crearBD(self):
        """ METODO CREA LA VENTAN DE LA CREACION DE BASES DE DATOS """
        
        win = FrameCrearBD(self, -1, "Crear Base de Datos", size=(300, 180),
                  style = wx.DEFAULT_FRAME_STYLE)
        
        win.Show(True)
        
        # DESHABILITAMOS LA VENTNA MADRE PARA BLOQUERLA
        self.parent.Enable(False)
    
    def abrirBD(self):
        
        win = FrameAbrirBD(self, -1, "Abrir Base de Datos", size=(260, 170),
                  style = wx.DEFAULT_FRAME_STYLE)
        
        #self.parent.AddChild(win)
        win.Show(True)
        #print win.GetId()
        
        self.parent.Enable(False)
        
        
#############################TREECTRL####################################################################
class MyTreeCtrl(wx.TreeCtrl):
    def __init__(self, parent, id, pos,size, style):
        wx.TreeCtrl.__init__(self, parent, id, pos, size, style)
        
###################################################################################################
class TestListCtrl(wx.ListCtrl):
    """
    Clase que permite generar un ListCtrl y añadirlo a una ventana
    """
    
    def __init__(self, parent, ID, pos=wx.DefaultPosition,
                 size=(825,498), style=0):
        """
        Constructor de la calse
        
        :param parent: Ventana donde se colocará el ListControl
        :param ID: Identificador único de este elemento
        :param pos: La posición del elemento
        :param size: El tamaño del objeto
        :param style: Los estilos que tendrá el objeto
        """
        
        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)

###################################################################################################
# VENTANAS SECUNDARIAS DEL MÓDULO
###################################################################################################

class FrameCrearBD(wx.Frame):
    """ CLASE QUE CREA LA VENTANA DE CREAR BASE DE DATOS"""
    
    def __init__(
            self, parent, ID, title, pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):
        """ CONSTRUCTOR """

        
        wx.Frame.__init__(self, parent.parent, ID, title, pos, size, style)
        # CENTRAMOS LA VENTANA
        self.CenterOnParent(wx.BOTH)
        self.parent = parent
        self.parent.ventanaHija = self
        
        # DESHABILITAMOS LA VENTANA MADRE, PARA BLOQUEARLA
        
        
        # CREAMOS EL PANEL QIE CONTENDRÁ LOS LABEL Y LOS CAMPOS DE TEXTO
        panel = wx.Panel(self, wx.ID_ANY)
        ###########################################
        # CREAMOS UNA CAJA VERTICAL, DE MANERA QUE SE PUEDA 
        object_1 = wx.BoxSizer(wx.VERTICAL)
        #Componentes
        self.lNombre = wx.StaticText(panel, -1, "Nombre(*)")
        self.iNombre = wx.TextCtrl(panel, -1, "",size=(120,30))
        self.iNombre.SetToolTipString("Nombre de la base de datos a crear")
        self.lClave = wx.StaticText(panel, -1, "Clave(*)")
        self.iClave = wx.TextCtrl(panel, -1, "",size=(120,30),style=wx.TE_PASSWORD)
        self.iClave.SetToolTipString("Password que se asociará al nombre de la base de datos")
        self.lConfirmacion = wx.StaticText(panel, -1, "Confirmar clave(*)")
        self.iConfirmacion = wx.TextCtrl(panel, -1, "",size=(120,30),style=wx.TE_PASSWORD)
        self.iConfirmacion.SetToolTipString("Vuelva a ingrear la clave para su respectiva confirmación")
        self.bAceptar = wx.Button(panel, wx.ID_OK, size=(100,30))
        self.bCerrar = wx.Button(panel, wx.ID_CLOSE, size=(100, 30))
        boxBotones = wx.BoxSizer(wx.HORIZONTAL)
        boxBotones.Add(self.bAceptar,0,wx.ALL,0)
        boxBotones.Add(self.bCerrar,0,wx.ALL,0)
        # CONTENEDOR QUE PERMITE DEFINIR CUANTAS COLUMNAS Y EN QUE SEPARACION VERTIAL Y HORIZAONTAL ESTARÁN
        sizer = wx.FlexGridSizer(cols=2, hgap=4, vgap=4)
        # COLOCAMOS LOS LABELS Y CAMPOS DE TEXTO DENTRO DEL sizer
        sizer.AddMany([ self.lNombre, self.iNombre,
                        self.lClave, self.iClave,
                        self.lConfirmacion, self.iConfirmacion,
                        ])
        
        # AÑADIMOS EL sizar AL CONTENEDOR VERTICAL
        object_1.Add(sizer,0,wx.ALL,25)
        #AÑADIMOS LOS BOTONES AL CONTENEDOR VERTICAL
        object_1.Add(boxBotones,0,wx.ALIGN_CENTER_HORIZONTAL,0)
        #Fijamos  los componentes a la ventana
        panel.SetSizer(object_1)
        self.Layout()
        
        
        # EVENTOS A LOS BOTONES
        self.Bind(wx.EVT_BUTTON, self.crearBaseDatos, self.bAceptar)
        self.Bind(wx.EVT_BUTTON, self.cerrarVentana, self.bCerrar)
        # EVENTO CUANDO SE PRESIONE LA X DE CERRA LA CENTANA
        self.Bind(wx.EVT_CLOSE, self.cerrarVentana)
    
            
    def cerrarVentana(self,event):
        """ METODO QUE CIERRA LA VENTAN """
        
        # HABILITAMOS LA VENTANA MADRE 
        self.parent.parent.Enable(True)
        self.Destroy()
        
    
    def crearBaseDatos(self,event):
        """ METODO QUE CREA LA BASE DE DATOS """
        #Verificamos el password
        self.parent.controlador.crearBaseDatos(self.iNombre,self.iClave,self.iConfirmacion)

#####################################################################################################
#####################################################################################################

class FrameAbrirBD(wx.Frame):
    def __init__(
            self, parent, ID, title, pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):

        wx.Frame.__init__(self, parent.parent, ID, title, pos, size, style)
        self.CenterOnParent(wx.BOTH)
        self.parent = parent
        self.parent.ventanaHija = self
        
        # CREAMOS EL PANEL
        panel = wx.Panel(self, wx.ID_ANY)
        # CREAMOS LA CAJA VERTICAL
        object_1 = wx.BoxSizer(wx.VERTICAL)
        
        # CREAMOS LOS ELEMENTOS DEL FORMULARIO
        self.lNombre = wx.StaticText(panel, -1, "Nombre(*)")
        self.iNombre = wx.Choice(panel, -1, (50, 50), choices = self.parent.controlador.modelo.listarBD())
        self.iNombre.SetToolTipString("Seleccione el nombre de la base de datos a la que se desea conectar")
        self.lClave = wx.StaticText(panel, -1, "Clave(*)")
        self.iClave = wx.TextCtrl(panel, -1, "",size=(120,30),style=wx.TE_PASSWORD)
        self.iClave.SetToolTipString("Ingrese la clave asociada a la base de datos")
        self.bAceptar = wx.Button(panel, wx.ID_OK, size=(100, 30))
        self.bCerrar = wx.Button(panel,wx.ID_CLOSE,size=(100,30))
        
        boxBotones = wx.BoxSizer(wx.HORIZONTAL)
        boxBotones.Add(self.bAceptar,0,wx.ALL,0)
        boxBotones.Add(self.bCerrar,0,wx.ALL,0)
        
        # FORMULARIO QUE TIENE DOS COLUMNAS Y UNA SEPARACIÓN DE 4 HORIZONTALMENTE Y VERTICALMENTE
        sizer = wx.FlexGridSizer(cols=2, hgap=4, vgap=4)
        sizer.AddMany([ self.lNombre, self.iNombre,
                        self.lClave, self.iClave,
                        ])
        
        object_1.Add(sizer,0,wx.ALL,25)
        object_1.Add(boxBotones,0,wx.ALIGN_CENTER_HORIZONTAL,0)
        
        #Fijamos  los componentes a la ventana
        panel.SetSizer(object_1)
        #object_1.Fit(self) #ESTO FIJA LA VENTANA AL TAMAÑO DEL object_1
        self.Layout()
        
        #Eventos
        self.Bind(wx.EVT_BUTTON, self.abrirBD, self.bAceptar)
        self.Bind(wx.EVT_BUTTON, self.cerrarVentana, self.bCerrar)
        self.Bind(wx.EVT_CLOSE, self.cerrarVentana)
    
            
    def cerrarVentana(self,event):
        #print "Estoy"
        self.parent.parent.Enable(True)
        self.Destroy()
        
    
    def abrirBD(self,event):
        #Verificamos el password
        if self.iNombre.GetCurrentSelection() == 0:
            msja(self,"Seleccione una base de datos");
        else:
            self.parent.controlador.abrirBD(self.iNombre.GetStringSelection(),self.iClave.GetValue())


#####################################################################################################
class FrameEditarCategoria(wx.Frame):
    def __init__(
            self, parent, ID, title, pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):

        
        wx.Frame.__init__(self, parent.parent, ID, title, pos, size, style)
        self.CenterOnParent(wx.BOTH)
        self.parent = parent
        self.parent.ventanaHija = self
        ###########################################
        
        object_1 = wx.BoxSizer(wx.VERTICAL)
        #Componentes
        self.lCategoriaVieja = wx.StaticText(self, -1, "Editar: ")
        self.lNombreEditar = wx.StaticText(self, -1, self.parent.tree.GetItemText(self.parent.controlador.treePresionado))
        self.lNombreEditar.SetToolTipString("Nombre de la categoría que desea editar")
        self.lNombre = wx.StaticText(self, -1, "Nueva(*)")
        self.iNombre = wx.TextCtrl(self, -1, "",size=(120,30))
        self.iNombre.SetToolTipString("Ingrese el nuevo nombre de la categoría")
        self.bAceptar = wx.Button(self, wx.ID_OK, size=(100,30))
        self.bCerrar = wx.Button(self, wx.ID_CLOSE, size=(100,30))
        boxBotones = wx.BoxSizer(wx.HORIZONTAL)
        boxBotones.Add(self.bAceptar,0,wx.TOP,15)
        boxBotones.Add(self.bCerrar,0,wx.TOP,15)
        
        ##
        sizer = wx.FlexGridSizer(cols=2, hgap=4, vgap=4)
        sizer.AddMany([ self.lCategoriaVieja, self.lNombreEditar,
                        self.lNombre, self.iNombre,
                        ])
        
        object_1.Add(sizer,0,wx.ALIGN_CENTER_HORIZONTAL | wx.TOP,20)
        object_1.Add(boxBotones,0,wx.ALIGN_CENTER_HORIZONTAL,0)
        #Fijamos  los componentes a la ventana
        self.SetSizer(object_1)
        #object_1.Fit(self) #ESTO FIJA LA VENTANA AL TAMAÑO DEL object_1
        self.Layout()
        
        #Eventos
        self.Bind(wx.EVT_BUTTON, self.editarCategoria, self.bAceptar)
        self.Bind(wx.EVT_BUTTON, self.cerrarVentana, self.bCerrar)
        self.Bind(wx.EVT_CLOSE, self.cerrarVentana)
    
            
    def cerrarVentana(self,event):
        #print "Estoy"
        self.parent.parent.Enable(True)
        self.Destroy()
        
    
    def editarCategoria(self,event):
        
        self.parent.controlador.accionEditarCategoria(self.iNombre)

#############################################################################################################

class FrameClave(wx.Frame):
    
    def __init__(
            self, parent, ID, title, pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):

        
        wx.Frame.__init__(self, parent.parent, ID, title, pos, size, style)
        self.CenterOnParent(wx.BOTH)
        self.parent = parent
        self.parent.ventanaHija = self
        #self.msje = msje
        #self.msja = msja
        panel = wx.Panel(self,-1)
        ###########################################
        
        object_1 = wx.BoxSizer(wx.VERTICAL)
        #Componentes
        self.lTitulo = wx.StaticText(panel, -1, u"Título(*)")
        self.iTitulo = wx.TextCtrl(panel, -1, "",size=(120,30))
        self.iTitulo.SetToolTipString("Ingrese el titulo de la clave que desea crear")
        self.lUsuario = wx.StaticText(panel, -1, u"Usuario(*)")
        self.iUsuario = wx.TextCtrl(panel, -1, "",size=(120,30))
        self.iUsuario.SetToolTipString("Nombre del usuario que desea recordar")
        self.lContrasenha = wx.StaticText(panel, -1, u"Contraseña(*)")
        self.iContrasenha = wx.TextCtrl(panel, -1, "",size=(120,30),style=wx.TE_PASSWORD)
        self.iContrasenha.SetToolTipString("La clave que desea recordar")
        self.lConfirmacion = wx.StaticText(panel, -1, u"Confirmar Clave(*)")
        self.iConfirmacion = wx.TextCtrl(panel, -1, "",size=(120,30),style=wx.TE_PASSWORD)
        self.iConfirmacion.SetToolTipString("Vuelva a ingrear la clave para su respectiva confirmación")
        self.lComentario = wx.StaticText(panel, -1, u"Comentario")
        self.iComentario = wx.TextCtrl(panel, -1, "",size=(200, 100), style=wx.TE_MULTILINE|wx.TE_RICH2)
        self.iComentario.SetToolTipString("Comentario relacionado a la clave que está creando")
        
        
        
        self.bAceptar = wx.Button(panel, wx.ID_OK, size=(100,30) )
        self.bCerrar = wx.Button(panel, wx.ID_CLOSE, size=(100,30))
        boxBotones = wx.BoxSizer(wx.HORIZONTAL)
        boxBotones.Add(self.bAceptar,0,wx.ALL,0)
        boxBotones.Add(self.bCerrar,0,wx.ALL,0)
        #self.bVer = wx.Button(self, 3010, "Ver", (5, 5))
        bmp = images.getPWShowBitmap()
        self.bVer = wx.BitmapButton(panel, -1, bmp, (15, 10),(bmp.GetWidth() + 15, bmp.GetHeight() + 15))
        ##self.bVer.SetBitmapSelected(images.getPWHideBitmap())
        self.bVer.SetToolTipString("Ver Contraseña")
        ##
        self.cajaHorizontal = wx.BoxSizer(wx.HORIZONTAL)
        self.cajaHorizontal.Add(self.iContrasenha)
        self.cajaHorizontal.Add(self.bVer)
        
        
        sizer = wx.FlexGridSizer(cols=2, hgap=4, vgap=4)
        sizer.AddMany([ self.lTitulo, self.iTitulo,
                        self.lUsuario,self.iUsuario,
                        self.lContrasenha,self.cajaHorizontal,
                        self.lConfirmacion, self.iConfirmacion,
                        self.lComentario, self.iComentario,
                        ])
        
        object_1.Add(sizer,0,wx.ALL,25)
        object_1.Add(boxBotones,0,wx.ALIGN_CENTER_HORIZONTAL,0)
        #Fijamos  los componentes a la ventana
        panel.SetSizer(object_1)
        #object_1.Fit(self) #ESTO FIJA LA VENTANA AL TAMAÑO DEL object_1
        self.Layout()
        
        #Eventos
        self.Bind(wx.EVT_BUTTON, self.cerrarVentana, self.bCerrar)
        self.Bind(wx.EVT_BUTTON, self.cambiarPassword, self.bVer)
        self.Bind(wx.EVT_CLOSE, self.cerrarVentana)
    
    
        
    def cambiarPassword(self,event):
        
        
        if self.bVer.GetLabelText() == "Ocultar":  
            self.iContrasenha.SetWindowStyle(wx.TE_PASSWORD)
            self.iConfirmacion.SetWindowStyle(wx.TE_PASSWORD)
            self.bVer.SetLabel("Ver")
            self.bVer.SetBitmapLabel(images.getPWShowBitmap())
        else:
            self.iContrasenha.SetWindowStyle(0)
            self.iConfirmacion.SetWindowStyle(0)
            self.bVer.SetLabel("Ocultar")
            self.bVer.SetBitmapLabel(images.getPWHideBitmap())
             
    def cerrarVentana(self,event):
        #print "Estoy"
        self.parent.parent.Enable(True)
        self.Destroy()


############################################################################################################

class FrameModificarClave(FrameClave):
    
    def __init__(self, parent, ID, title, titulo,usuario,contrasenha,confirmacion,comentario,pos=(100,100),
            size=wx.DefaultSize, style=wx.DEFAULT_FRAME_STYLE):
        
        FrameClave.__init__(self,parent, ID, title, size=(390, 350),style=style)
        
        self.tituloOriginal = titulo
        self.iTitulo.SetValue(titulo)
        self.iUsuario.SetValue(usuario)
        self.iContrasenha.SetValue(contrasenha)
        self.iConfirmacion.SetValue(confirmacion)
        self.iComentario.SetValue(comentario)
        
        self.Bind(wx.EVT_BUTTON, self.modificarClave, self.bAceptar)
        
    def modificarClave(self,evt):
        
        self.parent.controlador.modificarClave(self.tituloOriginal,self.iTitulo,self.iUsuario,self.iContrasenha,self.iConfirmacion,self.iComentario)